/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package abricots.entity;

import abricots.entity.collision.EntityCollisionManager;
import abricots.entity.command.EntityCommandManager;
import abricots.entity.drawer.EntityDrawer;
import abricots.entity.simulator.EntitySimulator;
import abricots.entity.state.EntityStateManager;
import abricots.game.GameEnv;
import java.util.Set;
import org.newdawn.slick.Graphics;

/**
 *
 * @author charly
 */
public interface Entity {
   public void register(GameEnv env);

   public void unregister();

   public void simulate(long fromTime, long targetTime, boolean fromValid);

   public void draw(Graphics g, long targetTime);

   public void cleanUp(long lastNeeded, long firstInvalid);

   public void addChild(int childId);

   public void removeChild(int childId);

   public void setParent(int id);

   public Set<Integer> getChilderen();

   public int getParentId();

   public void setId(int id);

   public int getId();

   public int getEntityTypeId();

   public boolean isValidated();

   public void setValidated(boolean validated);

   public EntityCollisionManager getCollisionManager();

   public EntityCommandManager getCommandManager();

   public EntityDrawer getDrawer();

   public EntitySimulator getSimulator();

   public EntityStateManager getStateManager();
}
